package cn.kgc.javaweb.servlet;

import cn.kgc.javaweb.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;

/**
 * @author: mosin
 * @version: v1.0  2022/9/2
 * 使用servlet+jsp的方式实现数据的展示
 */
@WebServlet("/list")
public class UserListServlet  extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO  查询数据库
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i <5 ; i++) {
            User user = new User();
            user.setId(i);
            user.setPassword("1234"+i);
            user.setUsername("admin"+i);
            user.setAge(20+i);
            String sex  = i%2==0?"男":"女";
            user.setSex(sex);
            users.add(user);

        }
        /**
         * 数据展示 将数据传递到   jsp页面
         * 1.http://localhost:8080/javaweb/list  users
         * 2.http://localhost:8080/javaweb/userlist.jsp  将页面跳转到userlist.jsp  同时 将users数据传递到页面中
         *  页面跳转：
         *      1. 转发   可以共享请求对象  地址栏不会发生改变  一次请求  服务器的内部行为
         *      2.重定向  不可以共享请求对象  地址栏会改变    两次请求  浏览器行为
         */

        //转发的方式实现  页面的跳转 同时传递数据 设置请求参数   服务器内部的行为  http://localhost:8080/javaweb/

        //req.setAttribute("users", users);
        //req.getRequestDispatcher("/userlist.jsp").forward(req,resp);

        /**
         * 通过页面的重定向 实现数据的展示  浏览器的行为   resp
         * path = /userlist.jsp    项目的根路径 http://localhost:8080/ + userlist.jsp
         * path = userlist.jsp    相对路径
         * http://localhost:8080/javaweb/list   -> http://localhost:8080/javaweb/userlist.jsp
         *
         * 动态获取项目的虚拟路径  req.getContextPath()
         *
         * 重定向如何实现数据的传递  请求地址会发生改变 但是 两次请求 属于同一次会话
         *
         * 会话:
         *    从浏览器中发送一次请求与服务器建立连接 即是开启一次会话 只要浏览器不关闭处于活动状态下或者服务器不宕机  会话就会一直保持
         *     可以将数据存储在会话对象中
         *     session   生成在服务端 保存在服务端
         *     cookie    生成在服务端  保存在客户端
         *     第一次请求时 服务器会创建一个cookie对象  key  JSESSIONID  value C93DA520B3AC4D6C5E86AA72F735F95F  session的id
         *     JSESSIONID=C93DA520B3AC4D6C5E86AA72F735F95F
         *     B792B732B0F3885D5B5375276B98B8D0
         */
        //获取session对象 存储数据
        HttpSession session = req.getSession();
        String id = session.getId();

        // 获取session的存活时间
        int maxInactiveInterval = session.getMaxInactiveInterval();
        System.out.println(maxInactiveInterval);  // 1800s  30min
        session.setMaxInactiveInterval(30);

        System.out.println("id = " + id);
        session.setAttribute("users", users);
        resp.sendRedirect(req.getContextPath()+"/userlist.jsp");
    }
}
